package com.mk.sso.config;

import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.mk.sso.inteceptor.HeaderInterceptor;
import com.zxw.common.constant.Constants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

/**
 * @author admin
 * @version 1.0
 * @description:
 * @date 2021/10/27 17:24
 */
@Slf4j
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

	@Autowired
	private HeaderInterceptor headerInterceptor;

	@Override
	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
		FastJsonHttpMessageConverter messageConverter = new FastJsonHttpMessageConverter();
		FastJsonConfig config = new FastJsonConfig();
		config.setDateFormat(Constants.DATETIME_FORMAT_STANDARD);
		messageConverter.setFastJsonConfig(config);
		messageConverter.setDefaultCharset(StandardCharsets.UTF_8);
		List<MediaType> mediaTypeList = getSupportedMediaTypes();
		messageConverter.setSupportedMediaTypes(mediaTypeList);
		converters.add(messageConverter);
	}

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		List<String> excludePath = new ArrayList<>();
		excludePath.add("/swagger-resources/**");
		excludePath.add("/webjars/**");
		excludePath.add("/v2/**");
		excludePath.add("/swagger-ui.html/**");
		excludePath.add("/doc.html/**");

		registry.addInterceptor(headerInterceptor)
				.addPathPatterns("/**")
				.excludePathPatterns(excludePath);
		WebMvcConfigurer.super.addInterceptors(registry);
	}

	public List<MediaType> getSupportedMediaTypes() {
		//创建fastJson消息转换器
		List<MediaType> supportedMediaTypes = new ArrayList<>();
		supportedMediaTypes.add(MediaType.APPLICATION_JSON);
		supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
		supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
		supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
		supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
		supportedMediaTypes.add(MediaType.APPLICATION_PDF);
		supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
		supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
		supportedMediaTypes.add(MediaType.APPLICATION_XML);
		supportedMediaTypes.add(MediaType.IMAGE_GIF);
		supportedMediaTypes.add(MediaType.IMAGE_JPEG);
		supportedMediaTypes.add(MediaType.IMAGE_PNG);
		supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
		supportedMediaTypes.add(MediaType.TEXT_HTML);
		supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
		supportedMediaTypes.add(MediaType.TEXT_PLAIN);
		supportedMediaTypes.add(MediaType.TEXT_XML);
		supportedMediaTypes.add(MediaType.ALL);
		return supportedMediaTypes;
	}


}
